package com.ryantenney.zookeeper.spring.config;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import com.ryantenney.zookeeper.spring.CuratorFrameworkFactoryBean;
import static org.springframework.beans.factory.config.BeanDefinition.ROLE_APPLICATION;
public class CuratorFrameworkBeanDefinitionParser extends AbstractBeanDefinitionParser {
@Override
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
final BeanDefinitionBuilder beanDefBuilder = BeanDefinitionBuilder.rootBeanDefinition(CuratorFrameworkFactoryBean.class);
beanDefBuilder.setRole(ROLE_APPLICATION);
beanDefBuilder.getRawBeanDefinition().setSource(parserContext.extractSource(element));
beanDefBuilder.addPropertyValue("connectString", element.getAttribute("connect-string"));
Element retryPolicyElement = DomUtils.getChildElementByTagName(element, "retry-policy");
if (retryPolicyElement != null) {
Element retryPolicyBeanElement = DomUtils.getChildElements(retryPolicyElement).get(0);
BeanDefinitionHolder retryPolicy = parserContext.getDelegate().parseBeanDefinitionElement(retryPolicyBeanElement, beanDefBuilder.getBeanDefinition());
beanDefBuilder.addPropertyValue("retryPolicy", retryPolicy);
}
Node namespace = element.getAttributeNode("namespace");
if (namespace != null) {
beanDefBuilder.addPropertyValue("namespace", namespace.getNodeValue());
}
return beanDefBuilder.getBeanDefinition();
}
}